#include <iostream>
#include <cstdio>
#include <signal.h>
#include <unistd.h>

using namespace std;

void Count(int cnt)
{
    while(cnt)
    {
        printf("cnt: %2d\r",cnt--);//将数字按宽度为2，采用右对齐方式输出，若数据位数不到2位，则用空格字符进行补齐。\r是回车输入，回到首行。
        fflush(stdout);
        sleep(1);
    }
}
void handler(int signo)
{
    cout<<"get a signo: "<<signo<<" 信号正在处理中..... "<<endl;
    Count(10);
}

int main()
{
    struct sigaction act, oact;
    act.sa_handler = handler;   
    act.sa_flags = 0;

    sigemptyset(&act.sa_mask);//进行初始化. 当正在处理某一信号的时候，在处理期间这个信号会被屏蔽，如果我们也想顺便屏蔽其他信号，就可以添加到这个sa_mask中
    sigaddset(&act.sa_mask, 3);//当信号处理完成之后，操作系统也会自动解除对于3号信号的屏蔽，解除屏蔽后对pending信号中比特位为1的进行递达处理。

    sigaction(SIGINT, &act, &oact);//捕捉2号信号

    while(true) sleep(1);

    return 0;
}